#include "Territorio.h"

Territorio::Territorio(string nombre, int x, int y, Continente* continente) {
	this->nombre = nombre;
	this->continente = continente;
	this->ejercitos = 0;
	this->x = x;
	this->y = y;
	this->colorJugador.assign("");
}

int Territorio::getX(){
	return x;
}

int Territorio::getY(){
	return y;
}

void Territorio::setX(int x) {
	this->x = x;
}

void Territorio::setY(int y) {
	this->y = y;
}

string Territorio::getNombre() {
	return this->nombre;
}

Continente* Territorio::getContinente() {
	return this->continente;
}

void Territorio::setEjercitos(unsigned int cantidadDeEjercitos, string color) {
	this->ejercitos = cantidadDeEjercitos;
	this->colorJugador = color;
	notifyObservers();
}
void Territorio::setJugador(string colorJugador) {
	this->colorJugador = colorJugador;
}

int Territorio :: getEjercitos() {
	return this->ejercitos;
}

string Territorio :: getJugador() {
	return this->colorJugador;
}

void Territorio::colocarEjercitos(unsigned int cantidadDeEjercitos, string color) {
	this->setEjercitos(this->ejercitos+cantidadDeEjercitos,color);
}

void Territorio::quitarEjercitos(unsigned int cantidadDeEjercitos) {
	this->setEjercitos(this->ejercitos-cantidadDeEjercitos,this->colorJugador);
}

bool Territorio::hayEjercitos() {
	return ejercitos > 0;
}

bool Territorio::enPoderDeJugador(string color) {
	return (colorJugador == color);
}

void Territorio::setEnPoderDe(string colorJugador) {
	this->colorJugador = colorJugador;
}

string Territorio::getEnPoderDe() {
	return colorJugador;
}
	

unsigned int Territorio::getCantidadDeEjercitos() {
	return ejercitos;
}

void Territorio::agregarAdyacencia(Territorio* territorio) {
	territoriosAdyacentes[territorio->getNombre()] = territorio;
}

bool Territorio::esAdyacente(Territorio* unTerritorio) {
	return (territoriosAdyacentes.count(unTerritorio->getNombre()) > 0);
}

map<string,Territorio*>* Territorio::obtenerTerritoriosAdyacentes() {
	return &territoriosAdyacentes;
}

Territorio::~Territorio() {
};
